package cn.gs.controller.streamTest;

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class MapStreamObjToObj {

    public static void main(String[] args) {
        // 将 Staff 对象，转化为 StaffPublic 对象，再通过搜集器 转化成list
        ObjToObj();
        // 集合去重
        listDistinct();
        //集合升序排列
        listOrderAsc();
        //集合降序排列
        listOrderDesc();
    }

    // 将 Staff 对象，转化为 StaffPublic 对象，再通过搜集器 转化成list
    public static void ObjToObj() {
        List<Staff> list = Arrays.asList(new Staff("张三",29,new BigDecimal("10000")) ,
                new Staff("李四",33,new BigDecimal("10000")) ,
                new Staff("王五",30,new BigDecimal("10000")) );
        // 将 Staff 对象，转化为 StaffPublic 对象，再通过搜集器 转化成list
        List<StaffPublic> pubList  = list.stream().map(sta -> {
            StaffPublic staffPublic = new StaffPublic() ;
            staffPublic.setName(sta.getName());
            staffPublic.setAge(sta.getAge());
            if( "李四" .equals(sta.getName())){
                staffPublic.setExtra("仅仅staff 李四，才会涉及金额精度");
            }
            return staffPublic ; } ).collect(Collectors.toList());
        // 遍历
        for(StaffPublic staffPublic : pubList){
            System.out.println(staffPublic.toString());
        }
    }
    // 集合去重
    public static  void listDistinct(){
        List<Integer> list = Arrays.asList( 12 , 13 ,14 ,21 ,31, 13 ,14 );
        list = list.stream().distinct().collect(Collectors.toList());
        System.out.println( "集合去重:  " + Arrays.toString(list.toArray()));
    }
    //集合升序排列
    public static  void listOrderAsc(){
        List<Integer> list = Arrays.asList( 12 , 13 ,14 ,21 ,31, 13 ,14 );
        list = list.stream().sorted(Comparator.comparing(Integer :: valueOf) ).collect(Collectors.toList());
        System.out.println( "集合升序排列:  " + Arrays.toString(list.toArray()));
    }
    //集合降序排列
    public static  void listOrderDesc(){
        List<Integer> list = Arrays.asList( 12 , 13 ,14 ,21 ,31, 13 ,14 );
        list = list.stream().sorted(Comparator.comparing(Integer :: valueOf , Comparator.reverseOrder() ) ).collect(Collectors.toList());
        System.out.println( "集合降序排列:  " + Arrays.toString(list.toArray()));

    }
}
